package com.zbkj.service.service.ai;

import cn.hutool.json.JSONObject;
import com.zbkj.common.model.system.SystemAttachment;
import com.zbkj.service.service.ai.request.AiHairstyleMaterialsCallbackRequest;
import com.zbkj.service.service.ai.request.AiHairstyleMaterialsRequest;
import com.zbkj.service.service.ai.response.AiHairestyleMaterialsAddAiMaterialsResponse;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * ai人像发型合成-service接口
 * @author lijie
 */
public interface AiProtraitHairstyleGenerateService {

    /**
     * 发型素材-ai特征提取-json参数封装
     * @param attid     发型素材attid
     * @param base64    发型素材转为base64的数据
     * @return json参数
     */
    JSONObject getAiHairParamJson(int attid, String base64);

    /**
     * 新增并注册发型素材特征（ai目标注册提取特征接口）
     * @param request
     * @return
     */
    AiHairestyleMaterialsAddAiMaterialsResponse addAiMaterials(AiHairstyleMaterialsRequest request);

    /**
     * ai发型素材-提取特征回调
     * @param request 回调过来的请求参数
     */
    Boolean callbackAiHm(AiHairstyleMaterialsCallbackRequest request);

    /**
     * ai人像发型合成-第3步-合成
     * @param attidPH   第2步用于提取特征的人像attid
     * @param attidHM   提取过特征的发型素材attid
     * @return 合成图
     */
    SystemAttachment step3Generate(String attidPH,String attidHM);

    /**
     * ai人像发型合成-第3步-合成之前的验证
     * -用于验证第2步提取人像特征的回调是否完成
     * @param attidPH   第2步选择的人像attid
     * @return  是否提取成功
     */
    Boolean step3GenerateValidate(String attidPH);

    /**
     * ai人像发型合成-第2步-提取特征回调
     * @param request 回调过来的请求参数
     */
    Boolean step2Callback(AiHairstyleMaterialsCallbackRequest request);

    /**
     * ai人像发型合成-第2步-提取特征
     * @param attid 第1步返回的人像图片attid
     * @return 是否成功
     */
    Boolean step2ExtractFeature(Integer attid);

    /**
     * ai人像发型合成-第1步-人像剪裁
     * @param multipart 人像照片文件
     * @return 人像剪裁列表
     */
    List<SystemAttachment> step1Prune(MultipartFile multipart);

    /**
     * 获取ai服务接口地址
     * @param configKey
     * @return
     */
    String getAiServerUrl(String configKey);

}
